package com.bookocean.domain.repository;

import com.bookocean.controller.dto.CloudHanPostDto;
import com.bookocean.controller.dto.CommentDto;

import java.util.List;

/**
 * 书摘评论仓储接口
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
public interface BookCommentRepository {



    /**
     * 获取书摘评论数量
     * 
     * @param quoteId 书摘ID
     * @return 评论数量
     */
    Integer getCommentCount(Long quoteId);

    /**
     * 获取评论预览（用于卡片显示）
     * 
     * @param quoteId 书摘ID
     * @param limit 限制数量
     * @return 评论列表
     */
    List<CloudHanPostDto.CommentInfo> getCommentPreview(Long quoteId, Integer limit);


    // ========== 通用互动方法（支持书摘、小说、章节） ==========

    /**
     * 添加评论（通用方法）
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型（1-书摘，2-小说，3-章节）
     * @param userId 用户ID
     * @param content 评论内容
     * @param parentId 父评论ID（可选）
     */
    void comment(Long targetId, Integer targetType, Long userId, String content, Long parentId);

    /**
     * 回复评论（通用方法）
     * 
     * @param commentId 评论ID
     * @param userId 用户ID
     * @param content 回复内容
     */
    void replyComment(Long commentId, Long userId, String content);

    /**
     * 获取目标评论数量（通用方法）
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型（1-书摘，2-小说，3-章节）
     * @return 评论数量
     */
    Integer countByTarget(Long targetId, Integer targetType);

    /**
     * 获取目标评论列表（通用方法）
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型（1-书摘，2-小说，3-章节）
     * @param page 页码
     * @param pageSize 每页数量
     * @return 分页评论列表
     */
    com.bookocean.controller.dto.PageResultDto<CommentDto> getCommentsByTarget(Long targetId, Integer targetType, Integer page, Integer pageSize);

    List<CommentDto.ReplyDto> getRepliesByCommentId(Long commentId);
}
